﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Npgsql;

namespace Golfvision2020
{
    public partial class Deltagare : Form
    {

        public class Person
        {
            public string _Id { get; set; }
            public string _Name { get; set; }

            public Person(string n, string i)
            {
                _Id = i;
                _Name = n;
            }

            public override string ToString()
            {
                return _Name + " (" + _Id + ")";
            }
        }
        private String antal_max;
        public Tävlingar Tävling;

        public Deltagare(Tävlingar tävling)
        {
            Tävling = tävling;
            InitializeComponent();

            GetSpelareFromDB();
            PickTävlingCombobox.ValueMember = "_Id";
            PickTävlingCombobox.DisplayMember = "_Namn";
            PickTävlingCombobox.DataSource = tävling.tävlingar;
            KlassCombobox.SelectedIndex = 0;

            GetSpelareUppgifterFromDB();
        }

        private void GetSpelareUppgifterFromDB()
        {
            String sql = String.Format("SELECT personnummer, handicap, telefon, " +
                         "first_name, last_name, status.status," +
                         "adress.gatuadress, stad.stad, stad.postnummer " +
                         "FROM spelare, status, adress, stad WHERE golf_id='{0}' " +
                         "AND spelare.status_id=status.status_id " +
                         "AND spelare.adress_id=adress.adress_id " +
                         "AND adress.stad_id=stad.stad_id;", NamnCombobox.SelectedValue);
            
            NpgsqlCommand command = new NpgsqlCommand(sql, Tävling.Klubben.conn);
            NpgsqlDataReader dr = command.ExecuteReader();
            dr.Read();
            NameBox.Text = dr["first_name"].ToString();
            LastnameBox.Text = dr["last_name"].ToString();
            PersonnrBox.Text = dr["personnummer"].ToString();
            AdressBox.Text = dr["gatuadress"].ToString();
            PostnrBox.Text = dr["postnummer"].ToString();
            PostortBox.Text = dr["stad"].ToString();
            TelefonBox.Text = dr["telefon"].ToString();
            HandicapBox.Text = dr["handicap"].ToString();
            StatusBox.Text = dr["status"].ToString();

            dr.Close();

        }

        private void GetSpelareFromDB()
        {
            List<Person> personer = new List<Person>();
            NamnCombobox.Items.Clear();

            //Ett commandobjekt skapas och knyts till ett sql-uttryck och en db-koppling
            NpgsqlCommand command = new NpgsqlCommand("select first_name,last_name,golf_id from spelare", Tävling.Klubben.conn);
            NpgsqlDataReader dr = command.ExecuteReader();  //Kommandot körs och resultatet läggs i ett datareader-objekt
            while (dr.Read()) //En loop som rad för rad läser innehållet i datareader'n
            {
                personer.Add(new Person(dr["first_name"].ToString() + " " + dr["last_name"].ToString(), dr["golf_id"].ToString()));
            }
            dr.Close();

            NamnCombobox.ValueMember = "_Id";
            NamnCombobox.DisplayMember = "_Namn";
            NamnCombobox.DataSource = personer;
        }

        private void Avbryt5Label_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void ReggaDeltagLabel_Click(object sender, EventArgs e)
        {
            // Kontrollera att någon är selectad i dropdownen
            if (NamnCombobox.SelectedIndex == -1)
            {
                MessageBox.Show("Du måste välja ett namn i listan");
                return;
            }
            
                // Hämta klass_id
                NpgsqlCommand command = new NpgsqlCommand("SELECT klass_id FROM klass WHERE klass='" + KlassCombobox.SelectedItem.ToString() + "' limit 1;", Tävling.Klubben.conn);
                NpgsqlDataReader dr = command.ExecuteReader();  //Kommandot körs och resultatet läggs i ett datareader-objekt
                dr.Read();
                String klassId = dr["klass_id"].ToString();
                dr.Close();

                command = new NpgsqlCommand("SELECT Count(golf_id) from tavlanden WHERE tavlings_id=" + PickTävlingCombobox.SelectedValue + " AND klass_id=" + KlassCombobox.SelectedIndex, Tävling.Klubben.conn);
                dr = command.ExecuteReader();
                dr.Read();
                String antal = dr["count"].ToString();
                dr.Close();

                if (Convert.ToInt32(antal) >= Convert.ToInt32(antal_max))
                {
                    MessageBox.Show("Max antal spelare för denna klass i tävlingen är redan uppfyllt.");
                    return;
                }
                
                String sql = String.Format(
                    @"INSERT INTO tavlanden(golf_id, tavlings_id, klass_id, resultat, registrerad, senast_uppdaterad)
                    SELECT {0}, {1}, {2}, 0, '{3}', '{4}'
                    WHERE NOT EXISTS (SELECT * FROM tavlanden WHERE golf_id={0} AND tavlings_id={1});"
                    , NamnCombobox.SelectedValue, PickTävlingCombobox.SelectedValue
                    , klassId, DateTime.Now, DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss zzz"));
                command = new NpgsqlCommand(sql, Tävling.Klubben.conn);
                if (command.ExecuteNonQuery() == 1)
                {
                    MessageBox.Show("Tävlanden '" + NamnCombobox.SelectedItem.ToString() + "' lades till.");
                }
                else
                {
                    MessageBox.Show("Tävlanden '" + NamnCombobox.SelectedItem.ToString() + "' finns redan registrerad i tävlingen.");
                }
        }

        private void NamnCombobox_SelectedIndexChanged(object sender, EventArgs e)
        {
            GetSpelareUppgifterFromDB();
            GetHandicapKlass();
        }

        private void PickTävlingCombobox_SelectedIndexChanged(object sender, EventArgs e)
        {

            GetHandicapKlass();

        }

        private void GetHandicapKlass()
        {
            NpgsqlCommand command = new NpgsqlCommand("SELECT antal_deltagare, handicap_a, handicap_b, handicap_c FROM tavling WHERE tavlings_id=" + PickTävlingCombobox.SelectedValue, Tävling.Klubben.conn);
            NpgsqlDataReader dr = command.ExecuteReader();
            dr.Read();
            antal_max = dr["antal_deltagare"].ToString();
            int handicapa = Convert.ToInt32(dr["handicap_a"].ToString());
            int handicapb = Convert.ToInt32(dr["handicap_b"].ToString());
            int handicapc = Convert.ToInt32(dr["handicap_c"].ToString());
            dr.Close();

            if (Convert.ToInt32(HandicapBox.Text) <= handicapa)
                KlassCombobox.SelectedIndex = 0;

            else if (Convert.ToInt32(HandicapBox.Text) <= handicapb)
                KlassCombobox.SelectedIndex = 1;

            else
                KlassCombobox.SelectedIndex = 2;
        }
    }
}
